import './index.css';
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import reportWebVitals from './reportWebVitals';

// HashRouter 实现 hash 式路由
// BrowserRouter 实现 histroy 式路由
import  { BrowserRouter} from 'react-router-dom'


// 配置持久化
// 1: 从react中 导入创建上下文通信对象的方法
import { createContext } from 'react';
// 3: 导入仓库store
import store from './store/index'

// 4: 从持久化插件中导入 persistGate
import { PersistGate } from 'redux-persist/integration/react'
// 5: 从store文件导入 持久化的store：persistor
import { persistor } from './store/index'

// import导入的文件，必须在其他代码的上面
// 2: 创建上下文通信对象
// var context = createContext()

// 导入Provider 代替 context.Provider
import { Provider } from 'react-redux';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  // HashRouter模式下，state传值刷新会丢失
  // BrowserRouter模式下，icon图标刷新容易丢失，注意icon图标引入方式，直接在APP.jsx中带入icon图标的css文件

  // 严格模式
  // <React.StrictMode>

  // history路由模式
  <BrowserRouter>
      {/* 6: 通过 context 的 Provider 属性 将store传递给内层所有组件中 */}
      {/* <context.Provider store={store} value=""> */}
      <Provider store = { store }>
          {/* 7: PersistGate 在内部每个组件中获取store中的数据的时候，会自动从localStorage中取出来放入到store中；每当组件内调用dispatch修改store中的数据的时候，会自动动更新数据到localStorage中 */}
          <PersistGate loading={null} persistor={persistor}>
                {/* 8: 包裹APP组件  */}
                <App />
          </PersistGate>
      </Provider>
      {/* </context.Provider> */}
  </BrowserRouter>
  // </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
